#include "CalcStack.h"

template <typename T>
CalcStack<T>::CalcStack(): MAX_STACK(100)//默认的最大栈
{
    m_stack = new T[MAX_STACK];
    m_sp = -1;
}

template <typename T>
CalcStack<T>::~CalcStack()
{
    delete m_stack;
}

// 入栈操作，如果栈满了就会返回 false
template <typename T>
bool CalcStack<T>::push(const T & data)
{
    if (m_sp >= MAX_STACK - 1)
        return false;
    m_stack[++m_sp] = data;
    return true;
}

// 要求在 pop 前，进行 isEmpty 检查, 否则在空栈情况下会返回空指针
template <typename T>
T CalcStack<T>::pop()
{
    if (m_sp <= -1)
        return nullptr;
    return m_stack[m_sp--];
}

// 要求在 pop 前，进行 isEmpty 检查, 否则在空栈情况下会返回空指针
template <typename T>
T CalcStack<T>::top() const
{
    if (m_sp <= -1)
        return nullptr;
    return m_stack[m_sp];
}

template <typename T>
bool CalcStack<T>::isEmpty() const
{
    return m_sp <= -1;
}


template <typename T>
bool CalcStack<T>::isFull() const
{
    return m_sp >= MAX_STACK - 1;
}
